Fix `cargo clean` when not in the root dir
authorAlex Crichton <alex@alexcrichton.com>
Mon, 11 Aug 2014 04:01:59 +0000 (21:01 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Mon, 11 Aug 2014 04:01:59 +0000 (21:01 -0700)
Closes #361

src/cargo/util/toml.rs
tests/test_cargo_clean.rs

index a7a959f993a65845029179cdebfb0fcb05a4d752..d160fef2ada6a62bb4938ad9c709678d305da822 100644 (file)
@@ -391,8 +391,8 @@ impl TomlManifest {
         Ok((Manifest::new(
                 &summary,
                 targets.as_slice(),
-                &Path::new("target"),
-                &Path::new("doc"),
+                &layout.root.join("target"),
+                &layout.root.join("doc"),
                 sources,
                 match project.build {
                     Some(SingleBuildCommand(ref cmd)) => vec!(cmd.clone()),
index 4e4c13e5ae0e8296d5b210efce87fb2a7b6a0b60..181ff78251c44d290eb37979bc35d009f8f4da45 100644 (file)
@@ -1,4 +1,4 @@
-use support::{project, execs, main_file, basic_bin_manifest};
+use support::{project, execs, main_file, basic_bin_manifest, cargo_dir};
 use hamcrest::{assert_that, existing_dir, is_not};
 
 fn setup() {
@@ -9,9 +9,25 @@ test!(cargo_clean_simple {
               .file("Cargo.toml", basic_bin_manifest("foo").as_slice())
               .file("src/foo.rs", main_file(r#""i am foo""#, []).as_slice());
 
-    assert_that(p.cargo_process("cargo-build"), execs());
+    assert_that(p.cargo_process("cargo-build"), execs().with_status(0));
     assert_that(&p.build_dir(), existing_dir());
 
-    assert_that(p.cargo_process("cargo-clean"), execs());
+    assert_that(p.process(cargo_dir().join("cargo-clean")),
+                execs().with_status(0));
+    assert_that(&p.build_dir(), is_not(existing_dir()));
+})
+
+test!(different_dir {
+    let p = project("foo")
+              .file("Cargo.toml", basic_bin_manifest("foo").as_slice())
+              .file("src/foo.rs", main_file(r#""i am foo""#, []).as_slice())
+              .file("src/bar/a.rs", "");
+
+    assert_that(p.cargo_process("cargo-build"), execs().with_status(0));
+    assert_that(&p.build_dir(), existing_dir());
+
+    assert_that(p.process(cargo_dir().join("cargo-clean"))
+                 .cwd(p.root().join("src")),
+                execs().with_status(0).with_stdout(""));
     assert_that(&p.build_dir(), is_not(existing_dir()));
 })